﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using WebMatrix.WebData;
using TrabajoFinal.Models;
using Consulta.Models;

namespace Consulta.Controllers
{
    public class AdminController : Controller
    {
        //
        // GET: /Admin/
        ContextoDatos db = new ContextoDatos();

        [Authorize(Roles="Admin")]
        public ActionResult ABMUsers()
        {
            ViewBag.nombre = WebSecurity.CurrentUserName;
            string[] roles;
            List<User> usuarios = new List<User>();
            foreach (var i in db.Usuarios)
            {
                roles = Roles.GetRolesForUser(i.usuario);
                usuarios.Add(new User (i.usuario, i.empresa_cod, roles[0]));
            }
            return View(model: usuarios);
        }

        [Authorize(Roles = "Admin")]
        public ActionResult Borrar(string user)
        {
            string[] allRoles = Roles.GetRolesForUser(user);
            Roles.RemoveUserFromRoles(user, allRoles);

            ((SimpleMembershipProvider)Membership.Provider).DeleteAccount(user);
            Membership.Provider.DeleteUser(user, true);
            Membership.DeleteUser(user, true);

            return RedirectToAction("ABMUsers");
        }

        [Authorize(Roles = "Admin")]
        public ActionResult CreateView()
        {
            ViewBag.roles = Roles.GetAllRoles();
            return View("AltaUsuario", model: db.Empresas);
        }

        [Authorize(Roles = "Admin")]
        [HttpPost]
        public ActionResult Create(string usuario, string contraseña1, string contraseña2, int empresa, string rol)
        {
            if (!(String.Compare(contraseña1, contraseña2) == 0))
            {
                ViewBag.mensaje = "Las contraseñas no coinciden";
                //return RedirectToAction("CreateView");
                ViewBag.roles = Roles.GetAllRoles();
                return View("AltaUsuario", model: db.Empresas);
            }
            if (!WebSecurity.UserExists(usuario))
            {
                WebSecurity.CreateUserAndAccount(usuario, contraseña1, new { empresa_cod = empresa });
                Roles.AddUserToRole(usuario, rol);
                return RedirectToAction("ABMUsers");
            }
            else
            {
                ViewBag.mensaje = "El usuario ya existe";
                //return RedirectToAction("CreateView");
                ViewBag.roles = Roles.GetAllRoles();
                return View("AltaUsuario", model: db.Empresas);
            }
        }

        [Authorize(Roles = "Admin")]
        public ActionResult Datos()
        {
            ViewBag.nombre = WebSecurity.CurrentUserName;
            string[] roles;
            List<User> usuarios = new List<User>();
            foreach (var i in db.Usuarios)
            {
                roles = Roles.GetRolesForUser(i.usuario);
                usuarios.Add(new User(i.usuario, i.empresa_cod, roles[0]));
            }
            return Json(usuarios, JsonRequestBehavior.AllowGet);
        }
    }
}
